#pragma once

#include <rcl_interfaces/msg/parameter.hpp>
#include <rclcpp/rclcpp.hpp>
#include <std_msgs/msg/empty.hpp>
#include <std_msgs/msg/string.hpp>

#include <map>
#include <string>
#include <vector>

using namespace std;
using SetParas = rcl_interfaces::srv::SetParameters;
using GetParas = rcl_interfaces::srv::GetParameters;
using Para = rcl_interfaces::msg::Parameter;

class AppNode : public rclcpp::Node {
  public:
    AppNode(const string &node_name);
    // virtual ~AppNode() override;

  private:
    void timer_callback();
    rclcpp::TimerBase::SharedPtr timer_;

  public:
    bool setParameter(const string &key, const string &value);
    const string getParameter(const string &key);
    const map<string, string> getAllParameters();
    const map<string, vector<string>> listParameters();
};
